
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head id="Head"><title>
	ftp中主动模式(port)与被动模式(PASV) - Programming Life - PHP博客
</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="keywords" content="PHP,LINUX">
    <link id="MainCss" type="text/css" rel="stylesheet" href="http://www.phpweblog.net/Skins/Valentine/style.css" /><link id="SecondaryCss" type="text/css" rel="stylesheet" href="http://www.phpweblog.net/killjin/customcss.aspx" /><link id="RSSLink" title="RSS" type="application/rss+xml" rel="alternate" href="http://www.phpweblog.net/killjin/rss.aspx" /></head>
<body>
    <form name="Form1" method="post" action="2653.html" id="Form1">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="
__VIEWSTATE" value="" />
</div>

<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['Form1'];
if (!theForm) {
    theForm = document.Form1;
}
function __doPostBack(eventTarget, eventArgument) {
    if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
        theForm.__EVENTTARGET.value = eventTarget;
        theForm.__EVENTARGUMENT.value = eventArgument;
        theForm.submit();
    }
}
//]]>
</script>


<script src="/WebResource.axd?d=hCqqcDq62xC48aLO1-oizzph91mftTcpBQYAMmX9y1_MEKckib0uai68YudFFqahbIRj8ZaZB19FpMr30&amp;t=634210652612724343" type="text/javascript"></script>

<script language=JavaScript>
									function ctlent(evt,id)
											{
												if(evt.ctrlKey && evt.keyCode == 13)
												{	
													try
													{
														TempSave(id);
													}
													catch(ex)
													{
													}
													finally
													{
													    __doPostBack('AjaxHolder$PostComment$btnSubmit','')
													}
												}
		
												}</script>
												<script language=JavaScript>function SetReplyAuhor(author){document.getElementById('AjaxHolder_PostComment_tbComment').value+="@"+author+"\n";document.getElementById('AjaxHolder_PostComment_tbComment').focus();return false}</script>
<script src="/ScriptResource.axd?d=AI5xA8cQGeaRP81Fxf9hL3CA-H04gzrcejiGmX9KhIoprvPzwuZ3-67w0Uo507vgI9JoJ1pQX9Ny_2PIbaO5H5yMdCRbqN7QcC5FjU09XHjKZapTVqFXrGyV-sF0HRzQEKTyXebCmSM8IcYADpdvIQl4UR9vWroZDucm2CpL9l9bUoeG0&amp;t=632999880532957500" type="text/javascript"></script>
<script src="/ScriptResource.axd?d=QSLat8IPkICM9mVH5_jkPAFCqE_Wb89dCuCoqKOFkV0Zbi-H0FVsczMlM_7xXMIqR9Esp0if0Bl2Vkbjnupe0WYkT3kG5Q3zSMcpR47FmKFXQdP5_47GNNodc_X38E8imMuVkNexHGXMw6513A7X00zAnrVSlzgEnQSFinqAcey1-TIIGsjm_M2mFxg1&amp;t=632999880532957500" type="text/javascript"></script>
        
<!--done-->
<TABLE cellpadding="0" cellspacing="0" border="0" align="center" width="100%">
<TR>
	<TD width=184 background="/skins/Valentine/images/banner1.gif"></TD>
	<TD background="/skins/Valentine/images/banner.gif">
<!--done-->
<div class="header">
	<div class="headerText">
		<a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.phpweblog.net/killjin/">Programming Life</a><br>
		<span style="font-size:12px;color:#4371A6;padding-left:20;">相信不能相信的，完成不能完成的。矛盾，就象征进步。</span>
	</div>
</div>
</TD>
	<TD width=295 background="/skins/Valentine/images/banner2.gif"></TD>
</TR>
</TABLE>
<div id="mylinks">
<!--done-->
<a id="MyLinks1_HomeLink" class="menu" href="http://www.phpweblog.net/">PHP博客</a>&nbsp;&nbsp;&nbsp;<a id="MyLinks1_MyHomeLink" class="mainmenu" href="http://www.phpweblog.net/killjin/">首页</a>&nbsp;&nbsp;&nbsp;<a id="MyLinks1_NewPostLink" class="mainmenu" href="http://www.phpweblog.net/killjin/admin/EditPosts.aspx?opt=1">新随笔</a>&nbsp;&nbsp;&nbsp;<a id="MyLinks1_NewArticleLink" class="mainmenu" href="/EnterMyBlog.aspx?NewArticle=1">新文章</a>&nbsp;&nbsp;&nbsp;<a id="MyLinks1_ContactLink" accesskey="9" class="mainmenu" href="http://www.phpweblog.net/killjin/contact.aspx">联系</a>&nbsp;&nbsp;&nbsp;<a id="MyLinks1_Syndication" class="mainmenu" href="http://www.phpweblog.net/killjin/Rss.aspx">聚合</a><a id="MyLinks1_XMLLink" href="http://www.phpweblog.net/killjin/Rss.aspx"><img src="http://www.phpweblog.net/images/xml.gif" style="border-width:0px;" /></a>&nbsp;&nbsp;&nbsp;<a id="MyLinks1_Admin" class="menu" href="http://www.phpweblog.net/killjin/admin/EditPosts.aspx">管理</a>
</div>
<div id="mytopmenu">
	
		<DIV id="mystats">
			
<!--done-->
<div class="blogStats">
posts - 132,comments - 7,trackbacks - 0

</div></DIV>
	
</div>
<div id="leftcontent" style="display:none">
	
		<DIV id="leftcontentcontainer">
			<table id="Calendar1_entryCal" class="Cal" cellspacing="0" cellpadding="0" title="Calendar" border="0" style="border-width:1px;border-style:solid;border-collapse:collapse;border:0px">
	<tr><td colspan="7" style="background-color:Transparent;"><table class="CalTitle" cellspacing="0" border="0" style="width:100%;border-collapse:collapse;">
		<tr><td class="CalNextPrev" style="width:15%;"><a href="javascript:__doPostBack('Calendar1$entryCal','V2891')" style="color:Black" title="Go to the previous month">&lt;</a></td><td align="center" style="width:70%;">2008年1月</td><td class="CalNextPrev" align="right" style="width:15%;"><a href="javascript:__doPostBack('Calendar1$entryCal','V2953')" style="color:Black" title="Go to the next month">&gt;</a></td></tr>
	</table></td></tr><tr><th class="CalDayHeader" align="center" abbr="日" scope="col">日</th><th class="CalDayHeader" align="center" abbr="一" scope="col">一</th><th class="CalDayHeader" align="center" abbr="二" scope="col">二</th><th class="CalDayHeader" align="center" abbr="三" scope="col">三</th><th class="CalDayHeader" align="center" abbr="四" scope="col">四</th><th class="CalDayHeader" align="center" abbr="五" scope="col">五</th><th class="CalDayHeader" align="center" abbr="六" scope="col">六</th></tr><tr><td class="CalOtherMonthDay" align="center" style="width:14%;">30</td><td class="CalOtherMonthDay" align="center" style="width:14%;">31</td><td align="center" style="width:14%;"><a href="http://www.phpweblog.net/killjin/archive/2008/01/01.html"><u>1</u></a></td><td align="center" style="width:14%;"><a href="http://www.phpweblog.net/killjin/archive/2008/01/02.html"><u>2</u></a></td><td align="center" style="width:14%;">3</td><td align="center" style="width:14%;">4</td><td class="CalWeekendDay" align="center" style="width:14%;"><a href="http://www.phpweblog.net/killjin/archive/2008/01/05.html"><u>5</u></a></td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;"><a href="http://www.phpweblog.net/killjin/archive/2008/01/06.html"><u>6</u></a></td><td align="center" style="width:14%;">7</td><td align="center" style="width:14%;">8</td><td align="center" style="width:14%;">9</td><td align="center" style="width:14%;">10</td><td align="center" style="width:14%;">11</td><td class="CalWeekendDay" align="center" style="width:14%;">12</td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">13</td><td align="center" style="width:14%;">14</td><td align="center" style="width:14%;">15</td><td align="center" style="width:14%;">16</td><td align="center" style="width:14%;"><a href="http://www.phpweblog.net/killjin/archive/2008/01/17.html"><u>17</u></a></td><td align="center" style="width:14%;">18</td><td class="CalWeekendDay" align="center" style="width:14%;">19</td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">20</td><td align="center" style="width:14%;">21</td><td align="center" style="width:14%;">22</td><td align="center" style="width:14%;">23</td><td align="center" style="width:14%;">24</td><td align="center" style="width:14%;">25</td><td class="CalWeekendDay" align="center" style="width:14%;"><a href="http://www.phpweblog.net/killjin/archive/2008/01/26.html"><u>26</u></a></td></tr><tr><td class="CalWeekendDay" align="center" style="width:14%;">27</td><td align="center" style="width:14%;">28</td><td align="center" style="width:14%;">29</td><td align="center" style="width:14%;">30</td><td align="center" style="width:14%;">31</td><td class="CalOtherMonthDay" align="center" style="width:14%;">1</td><td class="CalOtherMonthDay" align="center" style="width:14%;">2</td></tr><tr><td class="CalOtherMonthDay" align="center" style="width:14%;">3</td><td class="CalOtherMonthDay" align="center" style="width:14%;">4</td><td class="CalOtherMonthDay" align="center" style="width:14%;">5</td><td class="CalOtherMonthDay" align="center" style="width:14%;">6</td><td class="CalOtherMonthDay" align="center" style="width:14%;">7</td><td class="CalOtherMonthDay" align="center" style="width:14%;">8</td><td class="CalOtherMonthDay" align="center" style="width:14%;">9</td></tr>
</table>
<br>
			
<!--done-->
<div class="newsItem">
	用汗水浇灌着心田.
</div>

			
<H3>留言簿<span style="font-size:11px;font-weight:normal;">(2)</span></H3>
<ul>
	<li>
		<a id="SingleColumn1_ctl00_lnkMessages" href="http://www.phpweblog.net/killjin/Contact.aspx?id=1">给我留言</a>
	<li>
		<a id="SingleColumn1_ctl00_lnkPublicMsgView" href="http://www.phpweblog.net/killjin/default.aspx?opt=msg">查看公开留言</a>
	<li>
		<a id="SingleColumn1_ctl00_lnkPrivateMsgView" href="http://www.phpweblog.net/killjin/admin/MyMessages.aspx">查看私人留言</a>
	</li>
</ul>

<!--done-->

		<h1 class = "catListTitle">随笔分类<span style="font-size:11px;font-weight:normal">(162)</span></h1>
		
				<ul class = "catList">
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/382.html">Ajax(1)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl01_RssLink" title="Subscribe to Ajax(1)" class="listitem" href="http://www.phpweblog.net/killjin/category/382.html/rss"><img title="Subscribe to Ajax(1)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/308.html">Apache(18)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl02_RssLink" title="Subscribe to Apache(18)" class="listitem" href="http://www.phpweblog.net/killjin/category/308.html/rss"><img title="Subscribe to Apache(18)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl03_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/431.html">Editer(1)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl03_RssLink" title="Subscribe to Editer(1)" class="listitem" href="http://www.phpweblog.net/killjin/category/431.html/rss"><img title="Subscribe to Editer(1)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl04_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/406.html">HTTP(8)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl04_RssLink" title="Subscribe to HTTP(8)" class="listitem" href="http://www.phpweblog.net/killjin/category/406.html/rss"><img title="Subscribe to HTTP(8)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl05_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/384.html">JavaScript(14)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl05_RssLink" title="Subscribe to JavaScript(14)" class="listitem" href="http://www.phpweblog.net/killjin/category/384.html/rss"><img title="Subscribe to JavaScript(14)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl06_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/311.html">LAMP(7)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl06_RssLink" title="Subscribe to LAMP(7)" class="listitem" href="http://www.phpweblog.net/killjin/category/311.html/rss"><img title="Subscribe to LAMP(7)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl07_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/312.html">Life(14)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl07_RssLink" title="Subscribe to Life(14)" class="listitem" href="http://www.phpweblog.net/killjin/category/312.html/rss"><img title="Subscribe to Life(14)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl08_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/307.html">Linux(53)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl08_RssLink" title="Subscribe to Linux(53)" class="listitem" href="http://www.phpweblog.net/killjin/category/307.html/rss"><img title="Subscribe to Linux(53)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl09_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/309.html">Mysql(14)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl09_RssLink" title="Subscribe to Mysql(14)" class="listitem" href="http://www.phpweblog.net/killjin/category/309.html/rss"><img title="Subscribe to Mysql(14)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl10_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/318.html">Network(4)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl10_RssLink" title="Subscribe to Network(4)" class="listitem" href="http://www.phpweblog.net/killjin/category/318.html/rss"><img title="Subscribe to Network(4)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl11_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/310.html">PHP(22)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl11_RssLink" title="Subscribe to PHP(22)" class="listitem" href="http://www.phpweblog.net/killjin/category/310.html/rss"><img title="Subscribe to PHP(22)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl12_Link" class="listitem" href="http://www.phpweblog.net/killjin/category/391.html">System(6)</a><a id="SingleColumn1_Categories_CatList_ctl00_LinkList_ctl12_RssLink" title="Subscribe to System(6)" class="listitem" href="http://www.phpweblog.net/killjin/category/391.html/rss"><img title="Subscribe to System(6)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				</ul>
			
	
		<h1 class = "catListTitle">随笔档案<span style="font-size:11px;font-weight:normal">(132)</span></h1>
		
				<ul class = "catList">
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl01_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2011/04.html">2011年4月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl02_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2011/03.html">2011年3月 (3)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl03_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2011/02.html">2011年2月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl04_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2011/01.html">2011年1月 (4)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl05_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2010/12.html">2010年12月 (2)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl06_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2010/11.html">2010年11月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl07_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2010/04.html">2010年4月 (2)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl08_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2009/09.html">2009年9月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl09_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2009/08.html">2009年8月 (4)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl10_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2009/02.html">2009年2月 (2)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl11_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2009/01.html">2009年1月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl12_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/12.html">2008年12月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl13_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/11.html">2008年11月 (14)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl14_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/10.html">2008年10月 (4)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl15_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/08.html">2008年8月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl16_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/06.html">2008年6月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl17_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/03.html">2008年3月 (8)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl18_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/02.html">2008年2月 (1)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl19_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2008/01.html">2008年1月 (12)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl20_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2007/12.html">2007年12月 (31)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl21_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2007/11.html">2007年11月 (20)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl22_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2007/10.html">2007年10月 (2)</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl01_LinkList_ctl23_Link" class="listitem" href="http://www.phpweblog.net/killjin/archive/2007/09.html">2007年9月 (15)</a></li>
			
				</ul>
			
	
		<h1 class = "catListTitle">收藏夹<span style="font-size:11px;font-weight:normal">(5)</span></h1>
		
				<ul class = "catList">
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl01_Link" class="listitem" href="http://www.phpweblog.net/killjin/favorite/317.html">Linux(5)</a><a id="SingleColumn1_Categories_CatList_ctl02_LinkList_ctl01_RssLink" title="Subscribe to Linux(5)" class="listitem" href="http://www.phpweblog.net/killjin/favorite/317.html/rss"><img title="Subscribe to Linux(5)" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				</ul>
			
	
		<h1 class = "catListTitle">links</h1>
		
				<ul class = "catList">
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl01_Link" class="listitem" href="http://vbb.twftp.org/forumdisplay.php?f=57" target="_blank">cPanel/WHM - TWFTP</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl01_RssLink" title="Subscribe to cPanel/WHM - TWFTP" class="listitem" href="http://vbb.twftp.org/external.php?type=RSS2&amp;forumids=57"><img title="Subscribe to cPanel/WHM - TWFTP" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl02_Link" class="listitem" href="http://www.directadmin.cn" target="_blank">DirectAdmin</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl03_Link" class="listitem" href="http://Ext2Fsd" target="_blank">Ext2Fsd</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl04_Link" class="listitem" href="http://blog.csdn.net/robinhf/category/277025.aspx" target="_blank">Js 框架 - csdn</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl04_RssLink" title="Subscribe to Js 框架 - csdn" class="listitem" href="http://blog.csdn.net/robinhf/category/277025.aspx/rss"><img title="Subscribe to Js 框架 - csdn" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl05_Link" class="listitem" href="http://djasp.net/static/0/7-1.stm" target="_blank">Jvascript - 点击设计</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl06_Link" class="listitem" href="http://bianbian.lilydoc.net/index.php/technology/21.html" target="_blank">lastChild</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl07_Link" class="listitem" href="http://blog.csdn.net/andyxie407/" target="_blank">LINUX 系统管理</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl07_RssLink" title="Subscribe to LINUX 系统管理" class="listitem" href="http://blog.csdn.net/andyxie407/Rss.aspx"><img title="Subscribe to LINUX 系统管理" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl08_Link" class="listitem" href="http://linux.chinaitlab.com/" target="_blank">LINUX频道 - 中国实验室</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl09_Link" class="listitem" href="http://www.im321.com/blog/default.asp?cat=15" target="_blank">LINUX之旅</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl09_RssLink" title="Subscribe to LINUX之旅" class="listitem" href="http://www.im321.com/blog/feed.asp?cat=15"><img title="Subscribe to LINUX之旅" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl10_Link" class="listitem" href="http://yustar.joomlar.cn/" target="_blank">PHP权限 JS - joomlar</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl11_Link" class="listitem" href="http://thinkphp.cn/" target="_blank">ThinkPHP</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl11_RssLink" title="Subscribe to ThinkPHP" class="listitem" href="http://thinkphp.cn/index.php/Blog/feed/"><img title="Subscribe to ThinkPHP" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl12_Link" class="listitem" href="http://hi.baidu.com/ccex" target="_blank">ZF+LINUX</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl13_Link" class="listitem" href="http://blog.chinaunix.net/u/28888/index.html" target="_blank">计算机网络安全</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl13_RssLink" title="Subscribe to 计算机网络安全" class="listitem" href="http://blog.chinaunix.net/u/rss.php?id=28888"><img title="Subscribe to 计算机网络安全" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl14_Link" class="listitem" href="http://ray.imiddle.net/" target="_blank">天生我才必有用</a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl15_Link" class="listitem" href="http://www.cnblogs.com/gudai/category/37621.html" target="_blank">异域苍穹-PHP</a><a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl15_RssLink" title="Subscribe to 异域苍穹-PHP" class="listitem" href="http://www.cnblogs.com/gudai/rss"><img title="Subscribe to 异域苍穹-PHP" src="/Images/xml.gif" style="border-width:0px;" /></a></li>
			
				<li class = "catListItem"> <a id="SingleColumn1_Categories_CatList_ctl03_LinkList_ctl16_Link" class="listitem" href="http://hi.baidu.com/yanshenglong" target="_blank">硬件 - 硬维空间</a></li>
			
				</ul>
			
	


<script language="JavaScript">
function SearchGoogle(key,evt,site)
		{
			if(evt.keyCode==13 || evt.keyCode==0 || evt.type =='click')
			{
				key.focus();
				var keystr = encodeURIComponent(key.value);
				url = "http://www.google.com/search?q=";
				url = url+keystr;
				url += "&ie=UTF-8&oe=GB2312&hl=zh-CN&domains="+site+"&sitesearch="+site;
				window.location=url;
				return false;
			}
		}
</script>
<H3>搜索</H3>
<ul>
	<li>
		<li><input style="WIDTH: 130px" type="text" name="q" id="q" onkeydown="return SearchGoogle(document.getElementById('q'),event,'www.phpweblog.net/killjin')">&nbsp;<input onclick="SearchGoogle(document.getElementById('q'),event,'www.phpweblog.net/killjin')" type="button" value="搜索" name="sa">
	</li>
</ul>

<h3>最新评论
	<a id="SingleColumn1_ctl03_RSSHyperlink1" href="http://www.phpweblog.net/killjin/CommentsRSS.aspx"><img src="/images/xml.gif" style="border-width:0px;" /></a></h3>
<div class="RecentComment">
	
			<ul>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl01_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/07/20/2396.html#5384">1. re: PHP下自定义模仿JS的 escape和unescape函数</a>
			</li>
			<li style="word-break:break-all">
				楼主真是高手！<br>好用，收藏！
			</li>
			<li style="text-align:right;margin-right:4px">
				--鸟生鱼汤</li>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl02_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/07/19/5248.html#5383">2. re: Linux 提示 Ctrl+D,修复文件系统!</a>
			</li>
			<li style="word-break:break-all">
				非常感谢！！！！！！！！！11
			</li>
			<li style="text-align:right;margin-right:4px">
				--dngood</li>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl03_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/07/04/2624.html#5277">3. re: char,varchar,nvarchar的区别 datetime和smalldatetime的区别</a>
			</li>
			<li style="word-break:break-all">
				这篇帖子说的有很多错误，大家最好亲自测试后总结。<br>char 和相同长度的varchar的处理速度是有差别的，大数据量是差别比较大！<br><br>哎！误导了很多人！
			</li>
			<li style="text-align:right;margin-right:4px">
				--就怕抄的</li>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl04_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/07/01/2620.html#5260">4. re: 表单和头部缓存指令</a>
			</li>
			<li style="word-break:break-all">
				createSuperAdmincreateSuperAdmin
			</li>
			<li style="text-align:right;margin-right:4px">
				--gsdsdg</li>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl05_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/06/03/3058.html#4371">5. re: linux系统locale的设定</a>
			</li>
			<li style="word-break:break-all">
				受教了。
			</li>
			<li style="text-align:right;margin-right:4px">
				--科技牛</li>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl06_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/05/29/2998.html#3982">6. re: 放弃与得到</a>
			</li>
			<li style="word-break:break-all">
				你说的很对！！
			</li>
			<li style="text-align:right;margin-right:4px">
				--panjv</li>
		
			<li style="word-break:break-all">
				<a id="SingleColumn1_ctl03_CommentList_ctl07_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/05/2881.html#2897">7. re: UNIX常用命令</a>
			</li>
			<li style="word-break:break-all">
				正在ING
			</li>
			<li style="text-align:right;margin-right:4px">
				--我啦</li>
		
			</ul>
		
</div>

<h3>阅读排行榜</h3>
<div class="RecentComment">
	
			<ul style="word-break:break-all">
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl01_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/11/20/2356.aspx">1. Mysql 重启命令 和 locate命令(7023)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl02_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/01/06/2653.aspx">2. ftp中主动模式(port)与被动模式(PASV)(6218)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl03_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/01/26/2731.aspx">3. linux cp命令(5909)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl04_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/12/22/2584.aspx">4. linux 默认语言的修改 /etc/sysconfig/i18n 中 LANG 等环境变量(5503)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl05_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/11/07/2207.aspx">5. 软RAID和硬RAID的区别(3963)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl06_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/11/04/2169.aspx">6. centos 5.0 编译安装apache 2.2.6+php5.2.5+mysql5.0.46+Zend Optimizer 3.3.0+eacc(3883)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl07_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/09/14/1952.aspx">7. GNU parted的指令說明(3460)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl08_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/12/26/2606.aspx">8. PHP权限控制系统-PHPGACL(2850)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl09_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/11/06/2182.aspx">9. 开源的主机管理系统/虚拟主机控制面板(2163)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__222c2f1_TopList_ctl10_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/11/13/6068.aspx">10. 修复被破坏了的linux文件系统分区表(1986)</a>
			</li>
		
			</ul>
		
</div>

<h3>评论排行榜</h3>
<div class="RecentComment">
	
			<ul style="word-break:break-all">
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl01_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/11/27/2396.aspx">1. PHP下自定义模仿JS的 escape和unescape函数(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl02_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/12/29/2620.aspx">2. 表单和头部缓存指令(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl03_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2007/12/31/2624.aspx">3. char,varchar,nvarchar的区别 datetime和smalldatetime的区别(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl04_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/27/3058.aspx">4. linux系统locale的设定(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl05_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/06/29/5248.aspx">5. Linux 提示 Ctrl+D,修复文件系统!(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl06_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/04/2881.aspx">6. UNIX常用命令(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl07_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/19/2998.aspx">7. 放弃与得到(1)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl08_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/19/3000.aspx">8. 人生致命的8个经典问题(0)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl09_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/04/2882.aspx">9. SSI(0)</a>
			</li>
		
			<li>
				<a id="SingleColumn1__110a140_TopList_ctl10_Hyperlink1" href="http://www.phpweblog.net/killjin/archive/2008/03/19/2997.aspx">10. 世界上所有人的心事(0)</a>
			</li>
		
			</ul>
		
</div>
</DIV>
	
</div>
<div id="centercontent">
	
					
<!--done-->
<div class = "post">
	<div class = "postTitle">
		<a id="viewpost1_TitleUrl" class="postTitle2" href="http://www.phpweblog.net/killjin/archive/2008/01/06/2653.html">ftp中主动模式(port)与被动模式(PASV)</a>
	</div>
	<span class=content><strong>目录</strong> <br>
<ul>&nbsp;&nbsp;&nbsp;&nbsp; <br>
    <li>&nbsp;开场白 <br>
    <li>&nbsp;基础 <br>
    <li>&nbsp;主动FTP <br>
    <li>&nbsp;主动FTP的例子 <br>
    <li>&nbsp;被动FTP <br>
    <li>&nbsp;被动FTP的例子 <br>
    <li>&nbsp;总结 <br>
    <li>&nbsp;参考资料 <br>
    <li>&nbsp;附录&nbsp;1:&nbsp;配置常见FTP服务器 <br></li>
</ul>
<br><br><strong>开场白</strong> <br><br>处理防火墙和其他网络连接问题时最常见的一个难题是主动FTP与被动FTP的区别以及如何完美地支持它们。幸运地是，本文能够帮助你清除在防火墙环境中如何支持FTP这个问题上的一些混乱。 <br><br>本文也许不像题目声称的那样是一个权威解释，但我已经听到了很多好的反馈意见，也看到了本文在许多地方被引用，知道了很多人都认为它很有用。虽然我一直在找寻改进的方法，但如果你发现某个地方讲的不够清楚，需要更多的解释，请告诉我！最近的修改是增加了主动FTP和被动FTP会话中命令的例子。这些会话的例子应该对更好地理解问题有所帮助。例子中还提供了非常棒的图例来解释FTP会话过程的步骤。现在，正题开始了... <br><br><strong>基础</strong> <br><br>FTP是仅基于TCP的服务，不支持UDP。&nbsp;与众不同的是FTP使用2个端口，一个数据端口和一个命令端口（也可叫做控制端口）。通常来说这两个端口是21－命令端口和20－数据端口。但当我们发现根据（FTP工作）方式的不同数据端口并不总是20时，混乱产生了。 <br><br><strong>主动FTP</strong> <br><br>主动方式的FTP是这样的：客户端从一个任意的非特权端口N（N&gt;;1024）连接到FTP服务器的命令端口，也就是21端口。然后客户端开始监听端口N+1，并发送FTP命令&#8220;port&nbsp;N+1&#8221;到FTP服务器。接着服务器会从它自己的数据端口（20）连接到客户端指定的数据端口（N+1）。 <br><br>针对FTP服务器前面的防火墙来说，必须允许以下通讯才能支持主动方式FTP： <br>
<ol type=1><br>
    <li>任何端口到FTP服务器的21端口&nbsp;（客户端初始化的连接&nbsp;S&lt;-C） <br>
    <li>FTP服务器的21端口到大于1023的端口（服务器响应客户端的控制端口&nbsp;S-&gt;C） <br>
    <li>FTP服务器的20端口到大于1023的端口（服务器端初始化数据连接到客户端的数据端口&nbsp;S-&gt;C） <br>
    <li>大于1023端口到FTP服务器的20端口（客户端发送ACK响应到服务器的数据端口&nbsp;S&lt;-C） <br><br><br>画出来的话，连接过程大概是下图的样子： <br><img alt="" src="http://slacksite.com/images/ftp/activeftp.gif" onload="var image=new Image();image.src=this.src;if(image.width>0 &amp;&amp; image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}"> <br><br>在第1步中，客户端的命令端口与FTP服务器的命令端口建立连接，并发送命令&#8220;PORT&nbsp;1027&#8221;。然后在第2步中，FTP服务器给客户端的命令端口返回一个"ACK"。在第3步中，FTP服务器发起一个从它自己的数据端口（20）到客户端先前指定的数据端口（1027）的连接，最后客户端在第4步中给服务器端返回一个"ACK"。 <br><br>主动方式FTP的主要问题实际上在于客户端。FTP的客户端并没有实际建立一个到服务器数据端口的连接，它只是简单的告诉服务器自己监听的端口号，服务器再回来连接客户端这个指定的端口。对于客户端的防火墙来说，这是从外部系统建立到内部客户端的连接，这是通常会被阻塞的。 <br><br><strong>主动FTP的例子</strong> <br><br>下面是一个主动FTP会话的实际例子。当然服务器名、IP地址和用户名都做了改动。在这个例子中，FTP会话从&nbsp;testbox1.slacksite.com&nbsp;(192.168.150.80)，一个运行标准的FTP命令行客户端的Linux工作站，发起到testbox2.slacksite.com&nbsp;(192.168.150.90)，一个运行ProFTPd&nbsp;1.2.2RC2的Linux工作站。debugging（-d）选项用来在FTP客户端显示连接的详细过程。红色的文字是&nbsp;debugging信息，显示的是发送到服务器的实际FTP命令和所产生的回应信息。服务器的输出信息用黑色字表示，用户的输入信息用粗体字表示。 <br><br>仔细考虑这个对话过程我们会发现一些有趣的事情。我们可以看到当&nbsp;PORT&nbsp;命令被提交时，它指定了客户端(192.168.150.80)上的一个端口而不是服务器的。当我们用被动FTP时我们会看到相反的现象。我们再来关注PORT命令的格式。就象你在下面的例子看到的一样，它是一个由六个被逗号隔开的数字组成的序列。前四个表示IP地址，后两个组成了用于数据连接的端口号。用第五个数乘以256再加上第六个数就得到了实际的端口号。下面例子中端口号就是(&nbsp;(14*256)&nbsp;+&nbsp;178)&nbsp;=&nbsp;3762。我们可以用netstat来验证这个端口信息。 <br><br>testbox1:&nbsp;{/home/p-t/slacker/public_html}&nbsp;%&nbsp;<strong>ftp&nbsp;-d&nbsp;testbox2</strong> <br>Connected&nbsp;to&nbsp;testbox2.slacksite.com. <br>220&nbsp;testbox2.slacksite.com&nbsp;FTP&nbsp;server&nbsp;ready. <br>Name&nbsp;(testbox2:slacker):&nbsp;<strong>slacker</strong> <br><font color=#ff0000>---&gt;&nbsp;USER&nbsp;slacker</font> <br>331&nbsp;Password&nbsp;required&nbsp;for&nbsp;slacker. <br>Password:<strong>&nbsp;TmpPass</strong> <br><font color=#ff0000>---&gt;&nbsp;PASS&nbsp;XXXX</font> <br>230&nbsp;User&nbsp;slacker&nbsp;logged&nbsp;in. <br><font color=#ff0000>---&gt;&nbsp;SYST <br>215&nbsp;UNIX&nbsp;Type:&nbsp;L8</font> <br>Remote&nbsp;system&nbsp;type&nbsp;is&nbsp;UNIX. <br>Using&nbsp;binary&nbsp;mode&nbsp;to&nbsp;transfer&nbsp;files. <br>ftp&gt;<strong>&nbsp;ls</strong> <br><font color=#ff0000>ftp:&nbsp;setsockopt&nbsp;(ignored):&nbsp;Permission&nbsp;denied <br>---&gt;&nbsp;PORT&nbsp;192,168,150,80,14,178</font> <br>200&nbsp;PORT&nbsp;command&nbsp;successful. <br><font color=#ff0000>---&gt;&nbsp;LIST</font> <br>150&nbsp;Opening&nbsp;ASCII&nbsp;mode&nbsp;data&nbsp;connection&nbsp;for&nbsp;file&nbsp;list. <br>drwx------&nbsp;&nbsp;&nbsp;3&nbsp;slacker&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;104&nbsp;Jul&nbsp;27&nbsp;01:45&nbsp;public_html <br>226&nbsp;Transfer&nbsp;complete. <br>ftp&gt;&nbsp;<strong>quit</strong> <br><font color=#ff0000>---&gt;&nbsp;QUIT</font> <br>221&nbsp;Goodbye. <br><br><strong>被动FTP</strong> <br><br>为了解决服务器发起到客户的连接的问题，人们开发了一种不同的FTP连接方式。这就是所谓的被动方式，或者叫做PASV，当客户端通知服务器它处于被动模式时才启用。 <br><br>在被动方式FTP中，命令连接和数据连接都由客户端，这样就可以解决从服务器到客户端的数据端口的入方向连接被防火墙过滤掉的问题。当开启一个FTP连接时，客户端打开两个任意的非特权本地端口（N&nbsp;&gt;;&nbsp;1024和N+1）。第一个端口连接服务器的21端口，但与主动方式的FTP不同，客户端不会提交PORT命令并允许服务器来回连它的数据端口，而是提交PASV命令。这样做的结果是服务器会开启一个任意的非特权端口（P&nbsp;&gt;;&nbsp;1024），并发送PORT&nbsp;P命令给客户端。然后客户端发起从本地端口N+1到服务器的端口P的连接用来传送数据。 <br><br>对于服务器端的防火墙来说，必须允许下面的通讯才能支持被动方式的FTP: <br>
    <ol type=1><br>
        <li>从任何端口到服务器的21端口&nbsp;（客户端初始化的连接&nbsp;S&lt;-C） <br>
        <li>服务器的21端口到任何大于1023的端口&nbsp;（服务器响应到客户端的控制端口的连接&nbsp;S-&gt;C） <br>
        <li>从任何端口到服务器的大于1023端口&nbsp;（入；客户端初始化数据连接到服务器指定的任意端口&nbsp;S&lt;-C） <br>
        <li>服务器的大于1023端口到远程的大于1023的端口（出；服务器发送ACK响应和数据到客户端的数据端口&nbsp;S-&gt;C） <br><br>画出来的话，被动方式的FTP连接过程大概是下图的样子： <br><img alt="" src="http://slacksite.com/images/ftp/passiveftp.gif" onload="var image=new Image();image.src=this.src;if(image.width>0 &amp;&amp; image.height>0){if(image.width>=510){this.width=510;this.height=image.height*510/image.width;}}"> <br><br>在第1步中，客户端的命令端口与服务器的命令端口建立连接，并发送命令&#8220;PASV&#8221;。然后在第2步中，服务器返回命令"PORT&nbsp;2024"，告诉客户端（服务器）用哪个端口侦听数据连接。在第3步中，客户端初始化一个从自己的数据端口到服务器端指定的数据端口的数据连接。最后服务器在第4&nbsp;步中给客户端的数据端口返回一个"ACK"响应。 <br><br>被动方式的FTP解决了客户端的许多问题，但同时给服务器端带来了更多的问题。最大的问题是需要允许从任意远程终端到服务器高位端口的连接。幸运的是，许多FTP守护程序，包括流行的WU-FTPD允许管理员指定FTP服务器使用的端口范围。详细内容参看附录1。&nbsp; <br><br>第二个问题是客户端有的支持被动模式，有的不支持被动模式，必须考虑如何能支持这些客户端，以及为他们提供解决办法。例如，Solaris提供的FTP命令行工具就不支持被动模式，需要第三方的FTP客户端，比如ncftp。 <br><br>随着WWW的广泛流行，许多人习惯用web浏览器作为FTP客户端。大多数浏览器只在访问ftp://这样的URL时才支持被动模式。这到底是好还是坏取决于服务器和防火墙的配置。 <br><br><strong>被动FTP的例子</strong> <br><br>下面是一个被动FTP会话的实际例子，只是服务器名、IP地址和用户名都做了改动。在这个例子中，FTP会话从&nbsp;testbox1.slacksite.com&nbsp;(192.168.150.80)，一个运行标准的FTP命令行客户端的Linux工作站，发起到testbox2.slacksite.com&nbsp;(192.168.150.90)，一个运行ProFTPd&nbsp;1.2.2RC2的Linux工作站。debugging（-d）选项用来在FTP客户端显示连接的详细过程。红色的文字是&nbsp;debugging信息，显示的是发送到服务器的实际FTP命令和所产生的回应信息。服务器的输出信息用黑色字表示，用户的输入信息用粗体字表示。 <br><br>注意此例中的PORT命令与主动FTP例子的不同。这里，我们看到是服务器(192.168.150.90)而不是客户端的一个端口被打开了。可以跟上面的主动FTP例子中的PORT命令格式对比一下。 <br><br>testbox1:&nbsp;{/home/p-t/slacker/public_html}&nbsp;%&nbsp;ftp&nbsp;-d&nbsp;testbox2 <br>Connected&nbsp;to&nbsp;testbox2.slacksite.com. <br>220&nbsp;testbox2.slacksite.com&nbsp;FTP&nbsp;server&nbsp;ready. <br>Name&nbsp;(testbox2:slacker):&nbsp;<strong>slacker</strong> <br><font color=#ff0000>---&gt;&nbsp;USER&nbsp;slacker</font> <br>331&nbsp;Password&nbsp;required&nbsp;for&nbsp;slacker. <br>Password:&nbsp;<strong>TmpPass</strong> <br><font color=#ff0000>---&gt;&nbsp;PASS&nbsp;XXXX</font> <br>230&nbsp;User&nbsp;slacker&nbsp;logged&nbsp;in. <br><font color=#ff0000>---&gt;&nbsp;SYST <br>215&nbsp;UNIX&nbsp;Type:&nbsp;L8</font> <br>Remote&nbsp;system&nbsp;type&nbsp;is&nbsp;UNIX. <br>Using&nbsp;binary&nbsp;mode&nbsp;to&nbsp;transfer&nbsp;files. <br>ftp&gt;&nbsp;<strong>passive</strong> <br>Passive&nbsp;mode&nbsp;on. <br>ftp&gt;&nbsp;<strong>ls</strong> <br><font color=#ff0000>ftp:&nbsp;setsockopt&nbsp;(ignored):&nbsp;Permission&nbsp;denied</font> <br><font color=#ff0000>---&gt;&nbsp;PASV</font> <br>227&nbsp;Entering&nbsp;Passive&nbsp;Mode&nbsp;(192,168,150,90,195,149). <br><font color=#ff0000>---&gt;&nbsp;LIST</font> <br>150&nbsp;Opening&nbsp;ASCII&nbsp;mode&nbsp;data&nbsp;connection&nbsp;for&nbsp;file&nbsp;list <br>drwx------&nbsp;&nbsp;&nbsp;3&nbsp;slacker&nbsp;&nbsp;&nbsp;&nbsp;users&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;104&nbsp;Jul&nbsp;27&nbsp;01:45&nbsp;public_html <br>226&nbsp;Transfer&nbsp;complete. <br>ftp&gt;;&nbsp;<strong>quit</strong> <br><font color=#ff0000>---&gt;&nbsp;QUIT</font> <br>221&nbsp;Goodbye. <br><br><strong>总结</strong> <br><br>下面的图表会帮助管理员们记住每种FTP方式是怎样工作的： <br><br>主动FTP： <br>&nbsp;&nbsp;&nbsp;命令连接：客户端&nbsp;&gt;1023端口&nbsp;-&gt;&nbsp;服务器&nbsp;21端口 <br>&nbsp;&nbsp;&nbsp;数据连接：客户端&nbsp;&gt;1023端口&nbsp;&lt;-&nbsp;服务器&nbsp;20端口&nbsp; <br><br>被动FTP： <br>&nbsp;&nbsp;&nbsp;命令连接：客户端&nbsp;&gt;1023端口&nbsp;-&gt;&nbsp;服务器&nbsp;21端口 <br>&nbsp;&nbsp;&nbsp;数据连接：客户端&nbsp;&gt;1023端口&nbsp;-&gt;&nbsp;服务器&nbsp;&gt;1023端口&nbsp; <br><br>下面是主动与被动FTP优缺点的简要总结：&nbsp; <br><br>主动FTP对FTP服务器的管理有利，但对客户端的管理不利。因为FTP服务器企图与客户端的高位随机端口建立连接，而这个端口很有可能被客户端的防火墙阻塞掉。被动FTP对FTP客户端的管理有利，但对服务器端的管理不利。因为客户端要与服务器端建立两个连接，其中一个连到一个高位随机端口，而这个端口很有可能被服务器端的防火墙阻塞掉。 <br><br>幸运的是，有折衷的办法。既然FTP服务器的管理员需要他们的服务器有最多的客户连接，那么必须得支持被动FTP。我们可以通过为FTP服务器指定一个有限的端口范围来减小服务器高位端口的暴露。这样，不在这个范围的任何端口会被服务器的防火墙阻塞。虽然这没有消除所有针对服务器的危险，但它大大减少了危险。详细信息参看附录1。 <br><br><br><strong>参考资料&nbsp;</strong> <br><br>O'Reilly出版的《组建Internet防火墙》（第二版，Brent&nbsp;Chapman，Elizabeth&nbsp;Zwicky著）是一本很不错的参考资料。里面讲述了各种Internet协议如何工作，以及有关防火墙的例子。&nbsp; <br><br>最权威的FTP参考资料是RFC&nbsp;959，它是FTP协议的官方规范。RFC的资料可以从许多网站上下载，例如：<a href="ftp://nic.merit.edu/documents/rfc/rfc0959.txt&nbsp;" target=_blank><font color=#000000 size=2>ftp://nic.merit.edu/documents/rfc/rfc0959.txt&nbsp;</font></a>。 </li>
    </ol>
    </li>
</ol>
</span>

	<div class = "postDesc">posted on 2008-01-06 15:01 <a href='http://www.phpweblog.net/killjin/'>Prog</a> 阅读(6218) <a href='#Post'>评论(0)</a> &nbsp;<a href="http://www.phpweblog.net/killjin/admin/EditPosts.aspx?postid=2653">编辑</a>&nbsp;<a href="http://www.phpweblog.net/killjin/AddToFavorite.aspx?id=2653">收藏</a> <a href='http://www.phpweblog.net/killjin/services/trackbacks/2653.aspx'>引用</a> <a href="JavaScript:d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(saveit=window.open('http://wz.csdn.net/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'saveit','scrollbars=no,width=590,height=300,left=75,top=20,status=no,resizable=yes'));saveit.focus();">网摘</a> 所属分类: <a href='http://www.phpweblog.net/killjin/category/318.html'>Network</a> </div>
</div>
<img src ="http://www.phpweblog.net/killjin/aggbug/2653.html?webview=1" width = "1" height = "1" />

<!--
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/">
<rdf:Description
rdf:about="http://www.phpweblog.net/killjin/archive/2008/01/06/2653.html"
dc:identifier="http://www.phpweblog.net/killjin/archive/2008/01/06/2653.html"
dc:title="ftp中主动模式(port)与被动模式(PASV)"
trackback:ping="http://www.phpweblog.net/killjin/services/trackbacks/2653.aspx" />
</rdf:RDF>
-->

<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('AjaxHolder$scriptmanager1', document.getElementById('Form1'));
Sys.WebForms.PageRequestManager.getInstance()._updateControls(['tAjaxHolder$UpdatePanel1'], [], [], 90);

//]]>
</script>


<div id="AjaxHolder_UpdatePanel1">
	    
    
<style>
td { font-size: 12px }
.commentTextBox 
{ 
    font-family : Verdana; 
    font-size: 13px;
 }
</style>
<!--Beging Temp Save-->
<STYLE>.userData { BEHAVIOR: url(#default#userdata) }
	</STYLE>
<DIV class="userData" id="CommentsPersistDiv"></DIV>

<script type="text/javascript">
function pageLoad()
{
    Sys.WebForms.PageRequestManager.getInstance().add_initializeRequest(handleInitializeRequest);
    //Sys.WebForms.PageRequestManager.getInstance().add_endRequest(handleEndRequest);
}

function handleInitializeRequest(sender, args)
{
    var prm = Sys.WebForms.PageRequestManager.getInstance();
    var eid = args.get_postBackElement().id;
    if (eid.indexOf("DeleteLink")>0) 
    {
       args.get_postBackElement().innerHTML = "<font color='red'>正在删除...</font>";         
    }    
    if (eid.indexOf("btnSubmit")>0) 
    {
       document.getElementById("AjaxHolder_PostComment_ltSubmitMsg").innerHTML="正在提交...";
       document.getElementById("AjaxHolder_PostComment_btnSubmit").disabled = true;
       
    }    
    
}	

function TempSave(ElementID)
{
	try
	{
	CommentsPersistDiv.setAttribute("CommentContent",document.getElementById(ElementID).value);
	CommentsPersistDiv.save("CommentXMLStore");
	}
	catch(ex)
	{
	}
	
}
function Restore(ElementID)
{
	CommentsPersistDiv.load("CommentXMLStore");
	document.getElementById(ElementID).value=CommentsPersistDiv.getAttribute("CommentContent");
}	
			
			
</script>
<!--Ene TempSave-->
<div class="commentform">
<span id="AjaxHolder_PostComment_ltSubmitMsg" style="color:Red;"></span>
<br />
<a name="Feedback"></a>
	<TABLE cellSpacing="1" cellPadding="1" border="0">
		  
		<tr><td colSpan="3">只有注册用户<a href='http://www.phpweblog.net/login.aspx?ReturnUrl=/killjin/archive/2008/01/06/2653.html'>登录</a>后才能发表评论, 未注册用户请先<a href='http://www.phpweblog.net/RequireRegister.aspx'>注册</a>。</td></tr>
		<TR>
			<TD colSpan="3" height="1"></TD>
		</TR>	
		<TR>
			<TD colSpan="3">
			<br/>
			<script type="text/javascript"><!--
			google_ad_client = "pub-4210569241504288";
			/* phpweblog_commentbox_bottom_468x60, 创建于 08-9-13 */
			google_ad_slot = "6730283137";
			google_ad_width = 468;
			google_ad_height = 60;
			//-->
			</script>
			<script type="text/javascript"
			src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
			</script>
			</TD>
		</TR>
		<TR>
			<TD colSpan="3" height="5">网站导航:<div id="blogsite">
			<a href="http://news.cnblogs.com">IT新闻</a>&nbsp;&nbsp;
			<a href="http://www.cnblogs.com">博客园</a>&nbsp;&nbsp;
			<a href="http://www.blogjava.net">BlogJava</a>&nbsp;&nbsp;
			<a href="http://www.cnweblog.com">博客生活</a>&nbsp;&nbsp;
			<a href="http://www.cnitblog.com">IT博客网</a>&nbsp;&nbsp;
			<a href="http://www.cppblog.com">C++博客</a>&nbsp;&nbsp;
			<a href="http://www.phpweblog.net">PHP博客</a>&nbsp;&nbsp;
			<a href="http://space.cnblogs.com">博客园社区</a>			
			</div></TD>
		</TR>
		<TR>
			<TD colSpan="3">
				</TD>
		</TR>
	</TABLE>	
</div>
<div id="AjaxHolder_PostComment_ValidationSummary1" style="color:Red;display:none;">

	</div>

</div>

				
</div>

<!--done-->
<div class="footer">
	
	Copyright &copy;2011 Prog Powered By<a href="/">博客园</a> 模板提供：<a href="http://blog.hjenglish.com">沪江博客</a>
</div><div style="display:none">
<script src='http://s99.cnzz.com/stat.php?id=779677&web_id=779677' language='JavaScript' charset='gb2312'></script>
<script language="javascript" src="http://count37.51yes.com/click.aspx?id=378360864&logo=12"></script>
</div>
    
<script type="text/javascript">
//<![CDATA[
var Page_ValidationSummaries =  new Array(document.getElementById("AjaxHolder_PostComment_ValidationSummary1"));
//]]>
</script>

<script type="text/javascript">
//<![CDATA[
var AjaxHolder_PostComment_ValidationSummary1 = document.all ? document.all["AjaxHolder_PostComment_ValidationSummary1"] : document.getElementById("AjaxHolder_PostComment_ValidationSummary1");
AjaxHolder_PostComment_ValidationSummary1.showmessagebox = "True";
AjaxHolder_PostComment_ValidationSummary1.showsummary = "False";
//]]>
</script>


<script type="text/javascript">
//<![CDATA[
Sys.Application.initialize();
//]]>
</script>
</form>
    <script type="text/javascript" src="/script/ShowHidden.js"></script>      
</body>
</html>
